package com.qidian.mes.sys.service.impl;

import com.qidian.mes.pojo.Menu;
import com.qidian.mes.sys.mapper.MenuMapper;
import com.qidian.mes.sys.service.MenuService;
import com.qidian.mes.util.pojo.QdResult;
import org.springframework.aop.framework.AopContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author 小可怎么都睡不够
 * @Company 起点编程
 * @Description
 * @Time 2024/4/3 14:36
 */
@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuMapper menuMapper;
    //@Autowired
    //private MenuService menuService;// 这个对象就是一个代理对象
    @Override
    public QdResult<List<Menu>> queryAll() {
        // 查询一级菜单
        List<Menu> menus = menuMapper.selectByParentId(0L);
        // 从当前的上下文环境中获取menuService对象，这个对象才是代理对象，才能有事务
        MenuService menuService = (MenuService) AopContext.currentProxy();
        // 遍历一级菜单，递归查询子菜单
        for (Menu menu : menus){
            // 查询子菜单
            List<Menu> children = menuService.queryByParentId(menu.getId());
            if(children != null && children.size() > 0) {
                menu.setChildren(children);
                //menu.setHasChildren(true);
            }
        }
        return QdResult.success(menus);
    }

    @Override
    public List<Menu> queryByParentId(Long parentId) {
        List<Menu> menus = menuMapper.selectByParentId(parentId);
        if(menus == null || menus.size() == 0){
            return null; // 递归的出口
        }
        // 递归调用自己
        // 从当前的上下文环境中获取menuService对象，这个对象才是代理对象，才能有事务
        MenuService menuService = (MenuService) AopContext.currentProxy();
        for (Menu menu : menus){
            // 查询子菜单
            List<Menu> children = menuService.queryByParentId(menu.getId());
            menu.setChildren(children);
            //menu.setHasChildren(true);
        }
        return menus;
    }
}
